package moldat.utilities;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Parst aus einem String alle UniProdIDs. Diese Klasse implementiert nur eine
 * einzige Methode, die aus einem uebergebenen String alle UniProtIDs
 * extrahiert. Ein Objekt dieser Klasse lässt sich über getInstance()
 * generieren.
 *
 * @author Marc Zoeller
 */
public class AccParser {

    private static AccParser parser = null;
    private static Pattern UNIPROT_ID_PATTERN = Pattern.compile("[A-Z]\\d\\w{4}");

    /**
     * Liefert eine Instanz der AccParser-Klasse. Diese Methode sollte anstelle
     * des Default-Konstruktors benutzt werden.
     *
     * @return eine Instanz dieser Klasse
     */
    public static AccParser getInstance() {
        if (parser == null)
            parser = new AccParser();
        return parser;
    }

    /**
     * Extrahiert alle UniProtIDs aus einem String. Alle gefundenen UniProtIDs
     * werden in einer Liste gespeichert.
     *
     * @param input der zu durchsuchende String
     * @return Liste aller UniProtIDs
     * @throws FileNotFoundException
     * @throws IOException
     */
    public List<String> parse(String input) throws FileNotFoundException, IOException {
        List<String> foundIDs = new LinkedList<String>();
        Matcher m = UNIPROT_ID_PATTERN.matcher(input);
        while (m.find())
            foundIDs.add(m.group());
        return foundIDs;
    }
}
